package org.zoomdev.zoom.dao;

import org.zoomdev.zoom.common.expression.Symbol;

import java.util.Collection;

public interface Select<T extends Select> extends Query<T>, From<T> {

    T where(String key, Object value);

    T where(String key, Symbol symbol, Object value);

    T where(Condition condition);

    <E> T whereIn(String key, Collection<E> values);

    <E> T whereNotIn(String key, Collection<E> values);

    T whereNotNull(String key);

    T whereNull(String key);

    T like(String key, Like like, Object value);

    T orWhere(Condition condition);

    T orWhere(String key, Object value);

    T orLike(String key, Like like, Object value);


    T limit(int limit);

    T limit(int position, int limit);

    T orderBy(String key, Sort sort);

    T groupBy(String key);

    T having(String key, Symbol symbol, Object value);

    T join(String table, String on);

    T join(String table, String on, JoinType type);


    T select(String select);

    T from(String table);


}
